#include "programmecpp.h"
#include "stdlib.h"
#include <sstream>


programmecpp::programmecpp()
{
	nom_ficcpp = "a.cpp";
	Validity=0;
}

programmecpp::programmecpp(string name, bool silt):silencieux(silt)
{
	//On forme le nom du fichier de sortie cpp
	//On cherche d'abord si le nom fichier contient un point 
	int lastDotPosition=name.find_last_of(".");
	
	//Ensuite si il y a un point, on récupère la chaine sans l'extension et on remplace celle-ci par .cpp
	if ((lastDotPosition!=-1) && (name.length()>=1))
	{
		name=name.substr(0,lastDotPosition);
		nom_ficcpp = name+".cpp";
	}
	else //Sinon on ajoute simplement ".cpp" à la fin
	{
		nom_ficcpp = name+".cpp";
	}
	Validity=0;
}

void programmecpp::addFonctionCPP(const fonctioncpp& F)
{
	vect_fonction.push_back(F);
	Validity=1;
}

void programmecpp::streamize()
{
	if(Validity==1)
	{
		cout<<"Création du fichier "<<nom_ficcpp;
		ofstream outputfilecpp(nom_ficcpp.c_str());
		outputfilecpp <<"#include <iostream>"<<endl<<"using namespace std;"<<endl;
		
		for(int i=0;i<vect_fonction.size();i++)  
		{
			vect_fonction[i].streamize(outputfilecpp);
			if (!silencieux) cout<<".";
		}
		if (!silencieux) cout<<endl<<" >Terminée"<<endl;
		cout<<endl;
		outputfilecpp.close();
		Validity=2;
	}
	
  
	
}

void programmecpp::compile()
{
	if(Validity==2)
	{
		cout<<"---------------------------------------------------"<<endl;
		cout<<"Compilation du fichier "<<nom_ficcpp<<endl;
		stringstream ligneCompile;
		ligneCompile << "c++ -Wall -o";
		ligneCompile << nom_ficcpp.substr(0,nom_ficcpp.find_last_of("."))<<" ";
		ligneCompile << nom_ficcpp;
		
		system(ligneCompile.str().c_str());
		cout<<" >Terminée"<<endl<<"Tapez ./"<<nom_ficcpp.substr(0,nom_ficcpp.find_last_of("."))<<" pour éxécuter"<<endl;
		cout<<"---------------------------------------------------"<<endl;
	}
}





